iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
AI & Data

AI x 日常 x 30天系列 第 6

Epoch 6 - 物件辨識論文筆記 x CornerNet

  • 分享至 

  • xImage
  •  

昨天介紹完YOLO,
今天再介紹一篇Object Detection的論文CornerNet。

目前深度學習方法分為兩類:one-stage和two-stage,
two-stage的方法,例如RCNN系列,
通常會先提取region proposals找出物體候選框,
再根據候選框去分類,得到最後的結果,精確度比較高。

而one-stage方法就是將兩步驟合併,直接預測物體的位置還有類別,所以它的速度通常比two-stage快,
目前主流的方法YOLO, SSD都會用到Anchor Box,就是事先定義好框的大小和比例,再去預測offeset修正,算出物體的BBOX。

但是Anchor Boxes方法有幾個缺點,
第一,需要很大量的Anchor Box,才能確保覆蓋所有的GT,IoU才不會太低,
而且這會導致訓練時的Positive比例很低,因為假設設定9個Anchor,
可能只有1個能當postive,會導致training變慢

另外一個缺點就是,要手動設定Anchor大小和比例,會多很多hyperparameters。

所以這篇CornerNet,希望能夠不使用Anchor Box,而是透過預測Object的corner來做detection,
就是預測所以左上角和右下角的keypoint,然後再把他們group成一組組的BBox。

作者認為這樣做比較好的原因:

  1. 預測anchor box的中心點坐標要考慮四個方向的因素,左、右、上和下。而cornerNet在定位邊角點時只要考慮兩個方向,比如要定位左上角點,我們只需要知道物體的最上邊界和最左邊界。
  2. 邊界點來表示bbox,會更高效:因為只使用O(wh)量級的邊角點,最多可以表示O(w^2h^2)量級的anchor boxes。


網絡結構如圖所示,
首先使用兩個hourglass作為backbone,得到128x128的feature map,
之後分成兩個module,一個預測左上角點,一個預測右下角點。
每個module裡面先做corner pooling,這篇比較創新的部分,等等會介紹,
之後再分別預測heatmap,embedding vector和offset。

  • Heatmaps的大小是128x128xC個類別,這裡用COCO所以是80,heatmap上的每一點代表該類別,在這個位置左上角點的機率。例如在dog的那張heatmap,預測出了3個左上角點,那麼會有3個類別都是dog的bbox。
  • Offsets 的channel=2,分別為邊角點x,y的偏移量
  • Embedding vector是用來匹配左上角點和右下角點, 就像一個標籤,如果左上和右下角點的embedding值距離越接近,就被認為是同一個BBox。這邊channel=1

這篇group embedding的做法,主要受到一篇2017年的論文:Associative Embedding的啟發,
他原本是做多人姿態檢測,就是偵測所有人體關節點,然後每個關節點用embedding vector來分組。
這篇就用這個方法將把角點分組。


使用了一個變型的focal loss作為detection Loss,詳細解釋可以見論文。

然後,他們認為網路在預測角點時能得到的視覺線索很少,
例如,若要預測左上角點,他需要向右看,找到object的上界,
然後向下看找到左邊界,
但若距離太遠,網路很難學到這件事情,所以他們提出了一個corner pooling的方法來進行增強。


與其他檢測方法的比較,
在COCO競賽上的AP是one-stage中最好的,和two-stage方法比也不差。

結果圖,可以看到就算object重疊,也能很好的預測。


上一篇
Epoch 5 - 物件辨識論文筆記 x YOLO
下一篇
Epoch 7 - 物件辨識論文筆記 x CornerNet-Lite
系列文
AI x 日常 x 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言